<HTML>
<HEAD>
<TITLE>
BloqueDisco.cpp
</TITLE>
</HEAD>
<BODY>
<PRE>
<font color="blue">#include</font> <font color="maroon">"BloqueDisco.h"</font>

BloqueDisco<font color="black">:</font><font color="black">:</font>BloqueDisco<font color="black">(</font>TipoMemoria tipoMemoria, <font color="blue">int</font> tamanio, FILE <font color="black">*</font>fp, <font color="blue">int</font> id<font color="black">)</font><font color="black">{</font>
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoMemoria <font color="black">=</font> tipoMemoria;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tamanio <font color="black">=</font> tamanio;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>fp <font color="black">=</font> fp;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>offset <font color="black">=</font> ftell<font color="black">(</font>fp<font color="black">)</font>;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>id <font color="black">=</font> id;
<font color="black">}</font>

<font color="blue">void</font> BloqueDisco<font color="black">:</font><font color="black">:</font>addComponente<font color="black">(</font>ComponenteAlmacenamiento <font color="black">*</font>componente<font color="black">)</font><font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>componente<font color="black">-</font><font color="black">&#62;</font>getTipoMemoria<font color="black">(</font><font color="black">)</font><font color="black">!</font><font color="black">=</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoMemoria<font color="black">)</font>
        <font color="blue">throw</font> <font color="blue">new</font> CompuestoException<font color="black">(</font>CompuestoException<font color="black">:</font><font color="black">:</font>add<font color="black">)</font>;      
    <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>getTamanioLibre<font color="black">(</font><font color="black">)</font> <font color="black">&#60;</font> componente<font color="black">-</font><font color="black">&#62;</font>getTamanio<font color="black">(</font><font color="black">)</font><font color="black">)</font>
        <font color="blue">throw</font> <font color="blue">new</font> CompuestoException<font color="black">(</font>CompuestoException<font color="black">:</font><font color="black">:</font>add<font color="black">)</font>;      
    Compuesto<font color="black">:</font><font color="black">:</font>addComponente<font color="black">(</font>componente<font color="black">)</font>;
<font color="black">}</font>

<font color="blue">void</font> BloqueDisco<font color="black">:</font><font color="black">:</font>getAccesoDato<font color="black">(</font><font color="blue">void</font><font color="black">*</font><font color="black">*</font> accesoDato<font color="black">)</font><font color="black">{</font>
    fseek<font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>fp,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>offset,SEEK_SET<font color="black">)</font>;
    <font color="black">*</font>accesoDato <font color="black">=</font> <font color="black">(</font><font color="blue">void</font><font color="black">*</font><font color="black">)</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>fp; 
<font color="black">}</font>

<font color="blue">void</font> BloqueDisco<font color="black">:</font><font color="black">:</font>leer<font color="black">(</font><font color="blue">char</font> <font color="black">*</font><font color="black">*</font>datoLeido, TipoSerializacion modo<font color="black">)</font><font color="black">{</font>   
    <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>fp<font color="black">=</font><font color="black">=</font>NULL<font color="black">)</font>
        <font color="blue">throw</font> <font color="blue">new</font> NullPointerException<font color="black">(</font><font color="black">)</font>;
    fseek<font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>fp,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>offset,SEEK_SET<font color="black">)</font>;
    <font color="blue">unsigned</font> <font color="blue">int</font> bytesLeidos;
    <font color="black">*</font>datoLeido <font color="black">=</font> <font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font> malloc<font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tamanio<font color="black">)</font>;
    bytesLeidos <font color="black">=</font> fread<font color="black">(</font><font color="black">*</font>datoLeido, <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tamanio, <font color="maroon">1</font>, fp<font color="black">)</font>;  
    <font color="blue">if</font><font color="black">(</font><font color="black">!</font>bytesLeidos<font color="black">)</font>
        <font color="blue">throw</font> <font color="blue">new</font> DiscStorageException<font color="black">(</font>StorageException<font color="black">:</font><font color="black">:</font>lectura<font color="black">)</font>;
<font color="black">}</font>

<font color="blue">void</font> BloqueDisco<font color="black">:</font><font color="black">:</font>escribir<font color="black">(</font><font color="blue">void</font> <font color="black">*</font>accesoDato, TipoSerializacion modo<font color="black">)</font><font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>fp<font color="black">=</font><font color="black">=</font>NULL<font color="black">|</font><font color="black">|</font>accesoDato<font color="black">=</font><font color="black">=</font>NULL<font color="black">)</font>
        <font color="blue">throw</font> <font color="blue">new</font> NullPointerException<font color="black">(</font><font color="black">)</font>;
    FILE <font color="black">*</font>aux <font color="black">=</font> <font color="black">(</font>FILE<font color="black">*</font><font color="black">)</font> accesoDato;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>offset <font color="black">=</font> ftell<font color="black">(</font>aux<font color="black">)</font>;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>escribo<font color="black">(</font><font color="black">)</font>;
<font color="black">}</font>

<font color="blue">void</font> BloqueDisco<font color="black">:</font><font color="black">:</font>escribir<font color="black">(</font>TipoSerializacion modo<font color="black">)</font><font color="black">{</font>
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>escribo<font color="black">(</font><font color="black">)</font>;
    fseek<font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>fp,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>offset,SEEK_SET<font color="black">)</font>;
    <font color="blue">int</font> i;
    <font color="blue">for</font><font color="black">(</font>i<font color="black">=</font><font color="maroon">0</font>; i<font color="black">&#60;</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>getCantidadComponentes<font color="black">(</font><font color="black">)</font>; i<font color="black">+</font><font color="black">+</font><font color="black">)</font><font color="black">{</font>
        <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>getComponenteAt<font color="black">(</font>i<font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>escribir<font color="black">(</font>modo<font color="black">)</font>;
    <font color="black">}</font>
<font color="black">}</font>

<font color="blue">void</font> BloqueDisco<font color="black">:</font><font color="black">:</font>escribir<font color="black">(</font><font color="blue">void</font> <font color="black">*</font>accesoDato, Dato <font color="black">*</font>dato, TipoSerializacion modo<font color="black">)</font><font color="black">{</font>   
<font color="black">}</font>

<font color="blue">void</font> BloqueDisco<font color="black">:</font><font color="black">:</font>borrar<font color="black">(</font><font color="black">)</font><font color="black">{</font> 
<font color="black">}</font>

<font color="blue">void</font> BloqueDisco<font color="black">:</font><font color="black">:</font>escribo<font color="black">(</font><font color="black">)</font><font color="black">{</font>
    <font color="blue">char</font> <font color="black">*</font>bloque;
    bloque <font color="black">=</font> <font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font> malloc<font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tamanio<font color="black">)</font>;
    memset<font color="black">(</font>bloque,<font color="maroon">255</font>,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tamanio<font color="black">)</font>;   <font color="green">// inicializo bloque en FFFFFF...</font>
    fseek<font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>fp,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>offset,SEEK_SET<font color="black">)</font>;
    fwrite<font color="black">(</font>bloque,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tamanio,<font color="maroon">1</font>,fp<font color="black">)</font>;
    free<font color="black">(</font>bloque<font color="black">)</font>;   
<font color="black">}</font>

BloqueDisco<font color="black">:</font><font color="black">:</font>~BloqueDisco<font color="black">(</font><font color="black">)</font><font color="black">{</font>
<font color="black">}</font>

</PRE>
</BODY>
</HTML>
